package api

import (
	"Todolist/consts"
	"Todolist/pkg/utils"
	"Todolist/service"
	"Todolist/types"
	"github.com/gin-gonic/gin"
	"net/http"
)

func CreateTaskHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req types.CreateTaskReq //用于存储从请求中解析出的用户注册请求的数据。
		if err := ctx.ShouldBind(&req); err == nil {
			//参数校验 ctx.ShouldBind(&req) 函数来尝试从 HTTP 请求中解析请求数据，并将结果存储在 req 变量中
			l := service.GetTaskSrv()
			//函数来获取用户服务的实例
			resp, err := l.CreateTask(ctx.Request.Context(), &req)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, ErrorResponse(err))
				return
			}
			ctx.JSON(http.StatusOK, resp)
		} else {
			utils.LogrusObj.Infoln(err)
			ctx.JSON(http.StatusBadRequest, ErrorResponse(err))
		}
	}
}
func ListTaskHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req types.ListTaskReq //用于存储从请求中解析出的用户注册请求的数据。
		if err := ctx.ShouldBind(&req); err == nil {
			//参数校验 ctx.ShouldBind(&req) 函数来尝试从 HTTP 请求中解析请求数据，并将结果存储在 req 变量中
			if req.Limit == 0 {
				req.Limit = consts.BasePageSize
			}
			l := service.GetTaskSrv()
			//函数来获取用户服务的实例
			resp, err := l.ListTask(ctx.Request.Context(), &req)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, ErrorResponse(err))
				return
			}
			ctx.JSON(http.StatusOK, resp)
		} else {
			utils.LogrusObj.Infoln(err)
			ctx.JSON(http.StatusBadRequest, ErrorResponse(err))
		}
	}
}

func ShowTaskHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req types.ShowTaskReq //用于存储从请求中解析出的用户注册请求的数据。
		if err := ctx.ShouldBind(&req); err == nil {

			l := service.GetTaskSrv()
			//函数来获取用户服务的实例
			resp, err := l.ShowTask(ctx.Request.Context(), &req)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, ErrorResponse(err))
				return
			}
			ctx.JSON(http.StatusOK, resp)
		} else {
			utils.LogrusObj.Infoln(err)
			ctx.JSON(http.StatusBadRequest, ErrorResponse(err))
		}
	}
}
func UpdateTaskHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req types.UpdateTaskReq //用于存储从请求中解析出的用户注册请求的数据。
		if err := ctx.ShouldBind(&req); err == nil {

			l := service.GetTaskSrv()
			//函数来获取用户服务的实例
			resp, err := l.UpdateTask(ctx.Request.Context(), &req)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, ErrorResponse(err))
				return
			}
			ctx.JSON(http.StatusOK, resp)
		} else {
			utils.LogrusObj.Infoln(err)
			ctx.JSON(http.StatusBadRequest, ErrorResponse(err))
		}
	}
}

func SearchTaskHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req types.SearchTaskReq //用于存储从请求中解析出的用户注册请求的数据。
		if err := ctx.ShouldBind(&req); err == nil {

			l := service.GetTaskSrv()
			//函数来获取用户服务的实例
			resp, err := l.SearchTask(ctx.Request.Context(), &req)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, ErrorResponse(err))
				return
			}
			ctx.JSON(http.StatusOK, resp)
		} else {
			utils.LogrusObj.Infoln(err)
			ctx.JSON(http.StatusBadRequest, ErrorResponse(err))
		}
	}
}

func DeleteTaskHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req types.DeleteTaskReq //用于存储从请求中解析出的用户注册请求的数据。
		if err := ctx.ShouldBind(&req); err == nil {

			l := service.GetTaskSrv()
			//函数来获取用户服务的实例
			resp, err := l.DeleteTask(ctx.Request.Context(), &req)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, ErrorResponse(err))
				return
			}
			ctx.JSON(http.StatusOK, resp)
		} else {
			utils.LogrusObj.Infoln(err)
			ctx.JSON(http.StatusBadRequest, ErrorResponse(err))
		}
	}
}
